using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//棋盘数据
//这里只应该记录棋盘数据（主要是球位置和球数据），尽可能保证这个结构体最小
//因为有的计算过程需要复制一份棋盘，多余的数据会降低效率
public partial class FieldModel
{
  //棋盘上一个球的信息
  //使用结构体是想避免球传到外部之后，外部可以通过引用来更改场上的球数据
  //如果想要更新一个球的信息，应该手动调用GridModel中的UpdateBallModel
  public struct BallModel
  {
    public int ptr;
    public BallInfo info;
    public Vector2Int position;

    private bool m_isEmpty;
    private bool m_isAlive;
    public bool isEmpty => m_isEmpty;
    public bool isAlive => m_isAlive;
    public static BallModel Empty => new BallModel {
      m_isEmpty = true,
      info = BallInfo.Invalid
    };

    public void OnRemoveFromField() {
      m_isAlive = false;
    }

    public void OnSetIntoField() {
      m_isAlive = true;
    }

    public static BallModel Create(BallInfo info) {
      //生成一个初始状态的球
      return new BallModel {
        info = info
      };
    }

  }
}

